{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "In this post we will see how to perform Outlier Detection using MiniSom."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from minisom import MiniSom\n",
    "\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from sklearn.datasets import make_blobs\n",
    "from sklearn.preprocessing import scale"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "First let's create a datast with two clusters of data a 35% percento of outliers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAewAAAHSCAYAAAAuWvi9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAgAElEQVR4nO3df5Dcd33n+ddbo7bdMpRHjrVgty1Lybrk4BVYeMo4UeoKO2wENtgTOeFHyCVkk/LlbqlbqJz2hiMVBOdaTaLKhuzBLqsi1JKLzwgwTETkPRlOTnHnlLyMkIQRtnYNBtttb1CwxyzWYM1I7/uju0c93d9v97e7v/39+XxUqTzT3e7vt2d6+v39vD/vz/tj7i4AAJBta9I+AQAA0B8BGwCAHCBgAwCQAwRsAABygIANAEAOELABAMiBtWmfQC9XXHGFb9q0Ke3TAAAgEUePHv0Hd98QdF+mA/amTZs0Pz+f9mkAAJAIM/tB2H2kxAEAyAECNgAAOUDABgAgBwjYAADkAAEbAIAcIGADAJADBGwAAHKAgA0AQA4QsAEAyAECNgAAOUDABgAgBwjYAADkAAEbAIAcIGADAJADIwdsM7vGzB42s++Y2Ukz+xcBjzEz+zdm9qSZfcvM3jjqcQEAKJM49sNelvQH7v5NM3u1pKNm9lV3/07bY94m6brmvzdJ+nfN/wKJmTtW195Dp/TcwqKumqxq144tmt5WS/u0ACCSkUfY7v68u3+z+fV/k/S4pM5Pwbsk/aU3HJE0aWZXjnpsIKq5Y3V96EuPqb6wKJdUX1jUh770mOaO1dM+NQCIJNY5bDPbJGmbpEc77qpJeqbt+2fVHdRbz3GPmc2b2fzp06fjPL1I5o7VtX32sDbPHNT22cN8oBfE3kOntLh0btVti0vntPfQqZTOCAAGE0dKXJJkZq+S9ICkD7j7j4d9HnffJ2mfJE1NTXlMpxdJaxTW+mBvjcIkkTrNuecWFge6Pa9I+wPFFcsI28wqagTr+9z9SwEPqUu6pu37q5u3ZQqjsOK6arI60O15RNofKLY4qsRN0l9Ietzd/3XIww5I+q1mtfgtkl5y9+dHPXbcyjIKK6NdO7aoWplYdVu1MqFdO7akdEbx44ITKLY4UuLbJf33kh4zs+PN2/43SRslyd0/JelBSbdLelLSGUm/E8NxY3fVZFX1gOBcpFFYWbXSwkVOF3PBCRTbyAHb3f8/SdbnMS7pn496rHHbtWPLqjlsqXijsDKb3lYrVIDuxAUnUGx0Omszva2mPTu3qjZZlUmqTVa1Z+fWQn/IozjKkPYHyiy2KvGiKPooDMVVhrQ/UGYEbKBAuOAEiouUOAAAOUDABgAgBwjYAADkAHPYADBmtIxFHAjYADBG7FGAuJASB4AxomUs4sIIu0RIywHJo2Us4sIIuyTYyQlIRxl2ikMyCNglQVoOSActYxEXUuIlQVoOSActYxEXAnZJsJMTxo0aiXC0jEUcSImXBGk5jBM1EsD4EbBLgq1DMU7USADjR0q8REjLYVyokQDGj4BdMswzYhyokQDGj5R4iTDPiHGhRgIYPwJ2iTDPiHGhRgIYP1LiJcI8I8aJGglgvBhhlwgtEgEgvwjYJcI8Y39zx+raPntYm2cOavvsYeb3AWQGKfESoUVib+xbDCDLCNglwzxjuF5FefzMAKSNlDjQRFEegCxjhA005aH5B41vgPJihA00Zb0oj8Y3QLkRsIGmrDf/oPENUG6kxIE2WS7KY44dKDdG2EBO0PgGKDcCNpATWZ9jBzBepMSBnKDxDVBuBGwgR7I8xw5gvEiJAwCQAwRsAABygIANAEAOMIcNAECHLLYBJmADANAmq1vtErABAEPL4kh0VFndapeADQAYSlZHoqPKahvgWIrOzOwzZvZDM/t2yP1vNrOXzOx4898fxXFcAEB6irohTVbbAMdVJf4fJL21z2P+X3e/sfnvYzEdFwCQkqyOREeV1TbAsQRsd/+6pBfieC4AQD5kdSQ6qqxutZvkHPYvmNkJSc9J+l/c/WTQg8zsHkn3SNLGjRsTPD1gvIpYnINy27Vjy6o5bCkbI9E4ZLENcFIB+5uSrnX3n5jZ7ZLmJF0X9EB33ydpnyRNTU15QucHjFVRi3NQbmxIk6xEAra7/7jt6wfN7N+a2RXu/g9JHB9IW1aXiQCjyuJItKgSaU1qZq81M2t+fXPzuD9K4thAFhS1OAdAcmIZYZvZ/ZLeLOkKM3tW0kckVSTJ3T8l6dck/Y9mtixpUdK73Z10N0rjqsmq6gHBOe/FOQCSE0vAdvf39Ln/E5I+EcexgDwqcnEOgGTQ6QxIAMU56JTkqgFWKBQDARtICMU5aEly1QArFIqD/bABIGFJtvQsavvQMiJgA0DCklw1wAqF4iBgA0DCkmzpWdT2oWVEwAaAhCW5uURWN7LA4Cg6A4CEJblqgBUKxWFZ7l8yNTXl8/PzaZ8GAACJMLOj7j4VdB8pcQAAcoCADQBADjCHDcSATlIAxo2ADYyITlLIIi4ii4eUODAiOkkha1oXkfWFRbkuXETOHaunfWoYASNsYERJd5Ji5IR+el1E8l7JLwI2MKIk97om/Z6OvF0k0Y60mAjYQA9BH9TS6iYUt16/QQ8crSey1zUjp+SFXSTN/+AFPfzE6dAgHjXIj+NiIMmLSCSHxilAiM4PakmqrDHJpKVzF/5uqpUJ3X1TreeHd1w2zxxU0F+sSXpq9o7Yjwdp++zhwOBn0qrfRbUyoT07t2p6Wy30vfOqS9Zq4czSqou/zse1P8+wgo7f+bxZzBpk8ZyS1qtxCiNsIETQaHbpfHe4XFw6p4efOK1HZm4b+zkNO3Lig3B4YWnkzndCe6Yj7L3z4pklSRdG6ZdU1gRmTD76lZMj/X76tSPN4tRKFs8pawjYQIhB5vuSmhvctWNL4MipV/qdD8LRhF0kBWm9D6K8HxaXznUF65YXzyxp7lh9ZbQ+zMXW9LZa6OOyOLWSxXPKGpZ1ASEGme9Lam5weltNe3ZuVW2yKpNUm6z2TZ+y7Gw0QbtdWchjW++DON4Puw+c1LaPPaQP7D8e+/KsLBalZfGcsoaADYQI+qCurDFVJlZ/XCe9VeH0tpoemblNT83eoUdmbus7+uCDcDRBF0nvvWVjzy0rg947QSarldD7FhaXVlLo7eK42MriHtlZPKesISUOhAibBwy6LcspOyqGRxeUXp669vLQ90Hne+eyakUvn11eVawoNYLyMEa92BpmamXcsnhOWUOVOFBwUSqGMZoo88xzx+rafeDk0EG63YSZ/vSdbxi5krz9fNavq+gj77hhpHnzUVEcSZU4UGr9KoYxmqhFfa3q8bCAPWGm8+66arKqM2eXA9PhLefcYykcfGX5/MrXL55ZWllf3t5XIMkixV6FcmCEDQAjCVunXZusdi31C1tHL61eSx+UFQkyykg77LwnzHQuJC7UuNgbO0bYADAmgxT19Voi1l5T0JkVCQvy7SPt9sdHyaKEnXdYsJZYEpg2AjYAjKBfUV/7vOxl1Yom1pjOdTTgWSPpzNllbZ45uCrYtoJi2GhYalSN7z5wUq8sn++Zxu6cH55cVwlMu/caYbeOx9rodJASB4AR9Crqk7pbj0qr25pWK2u0fN5XVZB3tjEN6lcfRSstP2ib3X7HohXu+PRKibMOOwfmjtW1ffawNs8c1PbZw+xpiy68R9LTq5nNR79yMjDwuRrB8ePvulGXX3px13KvVhvTVrOUB47WdfdNNU1YWMuWYK209+4D3eexdN516UVru8773umtK68nDEsC08EIO+NYkoN+eI9kSyv1HKWdaW2y2nOOut1ktaK3v+FK3Xfk6a5NRy6prAlMb7eKxD6w/3jgc/YbKfPeSh4j7ByjrST64T2SHa0AN0jv8aij1YXFJe3/T8+sCtYm6e6barrj9Vd2tUttNR3p9T4IOnZ7tmbvoVO6+6baqlH43Tc1lqeRzUkeATvjaCuJfniPZEfQxVMvrQKzKG1Mpe7d4lzS35x4Xg8crQcG8ulttZ7vg84uYu0XHO3p+F07tuip2Tu0a8cWPXC0Hntvc0RDwM44+uuiH94j2THIRVJrBNw+By6FbywSZmFxqesiwSXd/+gzmjtWD30frF9X6Upr98vWkM1JFwE744KuvumvG788F23xHsmOyXXhm3m069xlbXpbbeX3GFdVUWuN9q3Xbwh8f3zkHTd0/T/9sjVkc9LFOuyMo63k+OV9v2jeI6OLq4d1lBrej7/rxpV+3dtnD68c8+VXlnum04PWb/ezuHROf3PieV1SWbPy3JPVinbfeUPg6+u3ppyNZNJFwM4B+uuOV680X15+7rxHhjfKBVtnoI+ysUdYv+5eLr1oQi+fHWwNdkvnObX3D+/Ub8csdtRKFylxlB5pvnIbdl42qEAryvzz4tI5/dWRpyMXp01WKzozZLAOO37Ya+u1pjzK/eOU52mruDDCRumR5iu3YS/YggJ93F0tKmtMP/7pUuzP2+u19cvWpJHNyfu0VVwI2Cg90nzlNuwFW680dnvr0WGtq6zRmaXw9HUUa0wKmvYOW3/dSu9PrqvIXXppcSkTNRFFmLaKAylxlF6aaT6kb9gq+15tQl2N99HH33Vj5DXWnUYN1lJwsJakl19ZXpVS7kzvv3hmSQuLS5lZa820VQMjbEAUbZXZsFX2vXa0khqBrtUp7P5Hn+n7+CQtLC6tSin3a/iS9miWaauGWAK2mX1G0tsl/dDd/0nA/SbpzyXdLumMpPe5+zfjODaAcotjSVaUC7au7Smrlb5V4a1OYVkK1i3tQTjKSDXN0SzTVg1xpcT/g6S39rj/bZKua/67R9K/i+m4AEosqFJ7HOnboOO8fHa5sUVlH4tL5wbeZSsprSAcZaSa5miWaauGWEbY7v51M9vU4yF3SfpLb2wNdsTMJs3sSnd/Po7jY7ziaioBxC2pYqSg4yydc61vdjYL2imrXRZH2NKFIBw0gm2XhdEs01bJzWHXJD3T9v2zzdu6AraZ3aPGKFwbN25M5OQQjuUUyLKkipHCnu/FM0tDF5WlrT0Id87jB1WJS1rVmY0L9+RlrujM3fdJ2ic19sNO+XRKj+UUyLKkipHCjjNhNtDuXMNav67SdxQflUmBAbfXCLaMF+5ZzCwmtayrLumatu+vbt6GjGM5BbIsqY1Pwo6TVKp73UWNsVUcU+HDBJ+y7dKVVG3EoJIK2Ack/ZY13CLpJeav84GtG5FlSRUjhR1nshq8O1dtsrqyXWYcWqP7OK4PWsHnD+cei9zqs2wX7lm9QIlrWdf9kt4s6Qoze1bSRyRVJMndPyXpQTWWdD2pxrKu34njuBg/llMg65IqRuo8ztyxul4+u9z1uMoaW/n76FXIlabFpXO678jTK93Y+qW4y7YOOqsXKHFVib+nz/0u6Z/HcSwki60bgWB7D53S0rnuIe+rLlm76u9j76FTjY1BLJ4Rclw6T6VXbUrZLtyzeoGSuaIzZA/LKYBuvSrHN88cXKm0bjVXyVKwDhP2msp24Z7VCxQCNgAMIWwUJmmlH3dWhW1O0msEWaYL96xeoBCwAWAI/ZqNZImZVF27RotL53XVZFW3Xr9BDxytZ24EmSVZvEAhYAPAENpHYb222syCp/bc0XXb1LWXZ24Eid7MMzyxMjU15fPz86kcO4uL5gFk0+aZgyPvfz1Ov3nLRt07vTXt00AEZnbU3aeC7mM/7ABZXTQPIJvirB42SZde1LvdaauHeVT3HXm61J9fc8fqkdecZxkBO0BWF80DyKagTmjDckkvnw2fF1+/rqIfL3av/+73nGX9/CrSAIyAHSCri+YBZFNnJ7T16yqarFZWuqL95i3xbWT04pmloVqilvXzq0gDMIrOAmR10TyA7OpXVfw3J55fWZM9LusqjUrwQZdstSta/U6RBmCMsAMktaEAgPLYfecNAz2+WlmjQfb6qFYm9K92vl7vvWVj1/9XWWM6c3a57xxur/RxXueBi7QfAgE7QFIbCgAoj+lttdDNQjoDbLUyoT07X68/e9eNqz6Hev3/rc+oe6e3rvr/JqsVyRqp9H5zuGHp449+5WRu54GLNAAjYIeY3lbTIzO36anZO/TIzG0EawAj233nDV3Bo7LGtK6tKnyyWgkdILz9DVdqYk33uNslzf/ghZXv2z+/Lr14bVfP87A53F7tVvM6D1ykARhz2ACQkM6Wl5dVK3r57PKqqvBXls9LupCebgXK+sKiHjha17nzwQVn9z/6TOBa60HmcHu1W436HFmUxa5lw2CEDQAJijr6DUtPhwmrHJ8MWbMddPuuHVtU6RjBV9ZYaCo+j/PAecYIGwDGqLPq+tbrN+jhJ07rueZ8cJBhWp1OWHCJWtgKsNCVYZ1PY41UPL3H08cIGwDGJKjq+q+OPL3yfS9hFeLrKsEf2+950zWBt78UspQs6PagPb6XzrkefuK07r6ptnJRMGGmu28qRpo5TwjYADAmQWntqFzB1eP/aufr9Zu3bOwaUT/8xOnAqu1BljWFzUmvzJ83h+Xn3PXA0XouqsSLhIANAGMy6i5eLgVWN987vVV/+s43rKo4ry8s6gP7j+tnP3RQfzj32MrtgyxrCgvuE2a5rRIvEuawAWBMJswitRENe9z6dRU9MnNb4P8TNno/79JfHXlaknTv9NauyvRe3cuC9viuViZCswR5qRIvCkbYADAmUYK1qTH/XJnonrX+yU+XQ9PO/YLl/Y8+s/J11L4SYWuWawXqFpZnjLABYExqEdY1/+LPXa57p7cG9hpfOu/ae+hUYIDtt2Z6mA1CpPA1y0Ejb6rEk8UIG0Dq8tqnup8o225+/0eNoBtWzR02ku733GHLvIZRpG5hecYIG0Cqgjp6fehLjaKpvAeE9vnjsNFwKyAPuktg67k/9KVvaXHpfNf9Ycu8hlWUbmF5xggbQKqKtF9xkNb8cb9uYcNsUjG9rabH//e3rVrmNWGm37xlY2CbUuQbI2wAqSrSfsVh5o7V9fLZ5a7bK2tsJSAPUs3d6d7prQMH6KLte10GBGwAK9L4EB80FZxHQR3EJOlVl6xd9fNNKu1c5GmIIiMlDkBScBvNJPY8LtJ+xWF6bVuZRqFd0achioqADUBSeh/iZahA7pUtiHJxFHcVfRmmIYqIlDgASel+iBe9Ajmog1in1sVR589hHOnrMkxDFBEjbACSBtskAoPpzCKECbo4GkfmowzTEEVEwAYgiQ/xcWtvDzpIq89xZD7KMA1RRKTEUVosa1ltlGVFGEzYJhthO2iNI31d9GmIIiJgIzFZCpAsawnGh3gy4thBi8xH+RCwkYisBche84IELCQh6sURmQ+0ELCRiKwFSJa1IE+CgnuWMlZIBkVnSETWAiQV0ciztJrcIF0EbCQiawGSimjkGZ3KyomAjURkLUCyrAV5lrWMFZLBHDYSkcXCGSqikVd0KisnAnbCylwoQoAE4sFSr3IiYA9pmMCbtaVNAPIpixkrjF8sAdvM3irpzyVNSPq0u8923P8+SXsltUoYP+Hun47j2HEYNPgOG3iztrQJQH6RsSqfkQO2mU1I+qSkfyrpWUnfMLMD7v6djofud/f3j3q8uA0TfIcNvBSK5FOZpzEAZEccVeI3S3rS3b/n7mclfU7SXTE8byKGWR4xbODN2tIm9Md6VwBZEUfArkl6pu37Z5u3dbrbzL5lZl80s2vCnszM7jGzeTObP336dAyn19swwXfYwJu1pU3oj/WuALIiqXXYX5G0yd1fL+mrkj4b9kB33+fuU+4+tWHDhrGf2DDBd9jAy9rf/GEaA0BWxFF0VpfUPmK+WheKyyRJ7v6jtm8/LelPYjhuLIZZHjFKhSaFIvnCelcAWRFHwP6GpOvMbLMagfrdkn6j/QFmdqW7P9/89k5Jj8dw3FgMG3wJvOXAelcAWTFywHb3ZTN7v6RDaizr+oy7nzSzj0mad/cDkv5nM7tT0rKkFyS9b9TjxongizCsdwWQFebuaZ9DqKmpKZ+fn0/7NAAASISZHXX3qaD76HQGAAVHL4FiIGADQIHRErk42F4TAAqMXgLFQcAGgAKjl0BxELABoMBoiVwcBGwAKDBaIhcHRWcAUGD0EigOAjYAFBzNoYqBlDgAADlAwAYAIAcI2AAA5AABGwCAHKDoDABQCEXvmU7ABgDkXhl6ppMSBwDkXhl6phOwAQC5V4ae6QRsAEDulaFnemkC9tyxurbPHtbmmYPaPntYc8fqaZ8SACAmZeiZXoqiszIUIwBAmZWhZ3opAnavYoQi/TIBoMyK3jO9FCnxMhQjAACKrRQBuwzFCACAYitFwC5DMQIAoNhKMYddhmIEAECxlSJgS8UvRgAAjFfavcpLE7ABABhWFpYHl2IOGwCAUWShVzkjbADAWKSdQo5TFpYHM8IGAMSulUKuLyzKdSGFnNe20FlYHkzABgDELgsp5DhlYXkwKXEAQOyykEKOUxaWBxOwAQCxu2qyqnpAcM5zh8m0lweTEgcAxC4LKeSiYYQNAIhdFlLIRUPABoAcysOSqbRTyEVDwAaAnMlC1y0kj4DdRx6uYlE+vC/LrdeSKd4HxUXA7oGrWGQR70sUbckUoqFKvIeiLfxHMfC+RBa6biF5BOweuIpFFvG+BEumyimWgG1mbzWzU2b2pJnNBNx/sZntb97/qJltiuO448ZVLLKI9yWmt9W0Z+dW1SarMkm1yar27NzKlEjBjTyHbWYTkj4p6Z9KelbSN8zsgLt/p+1hvyvpRXf/x2b2bkl/LOldox573Hbt2LJqrlDiKrZMslrYxfsSEkumyiiOorObJT3p7t+TJDP7nKS7JLUH7Lsk7W5+/UVJnzAzc3eP4fhjw8L/8spyYRfvS6Cc4gjYNUnPtH3/rKQ3hT3G3ZfN7CVJPyPpH2I4/lhxFVtOWV82w/sSSE9a2bfMLesys3sk3SNJGzduTPlsUFZ5KezKatoeKKo0s29xFJ3VJV3T9v3VzdsCH2NmayVdJulHQU/m7vvcfcrdpzZs2BDD6QGDy0NhV+uDo76wKNeFD465Y51/fgDikuayyjgC9jckXWdmm83sIknvlnSg4zEHJP128+tfk3Q46/PXKLc8LJthPTaQvDSzbyOnxJtz0u+XdEjShKTPuPtJM/uYpHl3PyDpLyT9n2b2pKQX1AjqQGblobArL2l7oEjS3Oc7ljlsd39Q0oMdt/1R29c/lfTrcRwLSErWC7vS/OAAyirNZZV0OgNyKg9pe6Bo0mxak7kqccSHCuJiy0PaHiiitLJvBOyCynLjD8Qn62l7APEhJV5QVBADQLEQsAuKCmIAKBYCdkHlofEHACA6AnZBUUEMAKOZO1bX9tnD2jxzUNtnD6feRZCis4KighgAhpfFwl0CdoEVpYKY5WkAkpbFHfsI2Mi0LF7lAii+LBbuMoeNTGN5GoA0ZLFwlxF2SvKQ5s3COWbxKhfdsvBeAeKUZs/wMATsFOQhzTvMOY7jQ5sNLrIvD+9nYFBZLNwlYKcgi8UMnQY9x3F9aGfxKher5eH9DAwja4W7zGGnIA9p3kHPcVxzzWnujINo8vB+BoqAEXYK8pDmHfQcx/mhnbWrXKyWh/czUASMsFOQhy5kg55jFisqR5W1LkdZlYf3M1AEjLBTkMVihk6DnmMac83jrEymkCq6PLyfgSIwd0/7HEJNTU35/Px82qeBiJJc2tMZUKXGBUJc89vbZw8Hpnlrk1U9MnPbyM8PAEHM7Ki7TwXdxwgbsUlyrnnclckUUgHIGuawkUvjDqhFnJMHkG8EbOTSuAMqhVQAsoaAnRNULK827oDK+m8AWcMcdg5Qsdwticpk1n8DyBICdg7Q+jEYARVAmZASzwEqlgEABOwcoGIZAEDAzgEqlgEAzGHnAK0fMawku88BGC8Cdk5QYIVBsboAKBZS4kBBjWuPcgDpIGADBcXqAqBYCNhAQbG6ACgWAjZQUHleXUArXqAbRWdAQeV1dQHFckAwAjaQcaMszcrj6gJa8QLBCNhAhpVxtEmxHBCMOWwgw8q4NItiOSAYARvIsDKONvNcLAeMEwEbyLAyjjant9W0Z+dW1SarMkm1yar27Nxa2CkAICrmsPugFzPStGvHllVz2FI5Rpt5LJYDxm2kgG1ml0vaL2mTpO9Leqe7vxjwuHOSHmt++7S73znKcZNSxoIfJKvfBWFel2YBiJ+5+/D/s9mfSHrB3WfNbEbSenf/XwMe9xN3f9Wgzz81NeXz8/NDn9+ots8eVj1grrA2WdUjM7elcEYoks4LQqkxeib9C5SXmR1196mg+0adw75L0mebX39W0vSIz5cpZSz4QXLKWAGOfKMDXbpGDdivcffnm1//V0mvCXncJWY2b2ZHzCw3Qb2MBT9IDheEyJNWRqi+sCjXhSlCgnZy+gZsM/uamX074N9d7Y/zRm49LL9+bXOI/xuSPm5mP9fjePc0g/v86dOnB3ktsWN5CcaJC0LkCRmh9PUtOnP3t4TdZ2Z/b2ZXuvvzZnalpB+GPEe9+d/vmdnfStom6bshj90naZ/UmMPu+wrGiIIfjFOcFeCsZsC4kRFK36jLug5I+m1Js83//nXnA8xsvaQz7v6KmV0habukPxnxuIlheQnGJa4LQlYz5F8eLriumqwGFuGSEUrOqAF7VtLnzex3Jf1A0jslycymJP2+u/+epJ+X9O/N7LwaKfhZd//OiMcFCiGOC0I2y8i3vFxwlbUnQJaMFLDd/UeSfjng9nlJv9f8+u8kbR3lOADCkarMt7xccDFFmD46nQE5R6oy3/J0wcUUYbroJQ7kHKsZ8o3VAoiKgA3kHJtl5BsXXIiKlDhQAKQq84u5YURFwMZY5GGZSpbx8ysXLrgQBQEbscvLMpWs4ueXDC6KkDcEbMSuXwtDPiR7y8synzzjogh5RMBG7MKWo7Q+FPmQ7C1Py3zyahwXRYzYMW5UiSN2YctRJszYPCAClvmMX9wXRexkhSQQsBG7sGUq5zx4LxdGjquxzGf84r4oYicrJIGAjdiFrQuu9fmQnDtW1/bZw9o8c1DbZw+XdnTCuurxi/uiiGkMJIE5bIxF2DKVsM0DKAJajWU+4xX32vlJiPgAABkuSURBVGfawyIJBGwkpteH5PbZw1RGI1FxXhSxkxWSQMBGosI+JEkpIs/oVoYkELCRCZdVK1pYXOq6fZiUIstrkAamMTBuBGxEEjUIDhMs547V9fLZ5a7bK2ts4JQic+EAiooqcfQVdY3psGtR9x46paVz3Uu+XnXJ2oGDLMtrABQVI2z0FbUr1LAtScPmqRfOdKfI+2EuHEBREbDRV9QgOGxL0kGWxPRLubO8BkBRkRIvuSjNSqJ2hRq2JWnUJhZzx+ra9YUTq1Luu75wYtU50yUMQFERsEss6pxzUBCUpDNnl7uCZWWNrXpMZY31bUkatbPX7gMntXR+9XMtnXd9YP/xlYsNuoQBKCpS4iUWdW669fXuAydXLb168cxSdwX26ngtmTQZYclWlCUxQc/R0plmJ0CjjFjSWGyMsEtskAKt6W01XXpx9/VdZ1FZZ7X30jmXmSKN0EdFNTjKLM0dw+aO1XXjRx/SppmD2jRzUNs+9lBp9wIYJwJ2iQ26Y1G/AN+r2nvPzq2arFZW3f7imSXt+uKJSH/YUf/4qQZHWaW1pLFVW9KZfYv6t43oCNglNmiBVr8A3+v+6W01WWe6XI0R+Ee/crLr9lYx3KaZg/q5Dz2oD+w/3uul9D1HoOjSWtK499CprtoSqfG3TcYrXgTsEhu0QKtfgL/1+g1dU9jt978Ysq668/b21J6k0KK1TmGV5WzZiTKIe4/vqHpdEJDxihdFZyURVowySIFWrw0O5o7V9cDRutpDq0m6+6bBC8CCUnthJsx03j2wwIY2pSiTtHYMC+t90LoP8SFgl8AogSso0D8yc9vK7R/cf1x7D53SmbPLXUHWJT38xOmV5wnTObc9yFX5n77zDV1BunW+a6x7SRlbdqKo0toxbNeOLdr1hRNdafHKxOB7AaA3AnYJRF2+1Sks0H9h/mn93XdfWBlNh11dSxeCb6+5rIXFJW2fPbzy4dLrir3d+nWVniPqfuu/gaJJY0lj0LLP9esq+sg7buDCOGYE7BIYthglLNA/8t0XIh+7lRLrd6z2UX9Qaq9TtTKhj7zjhr7n2+uccAHrdzEKeh8kg4BdUP1Sw1L/wDXqSLSyxnTm7LI2zxwMPYd2i0vn9AefP6Hz7rqsWtEllTV68cySJpr/b+u/tZCAEvV8b71+w9CvqYiCMikf3H9c8z94QfdOb131OII6kB4CdgFFSQ1HKUaJmppumaxWdOnFa/XcwqIuq1b08tnllQrwqJXercctLC6pWpnQx991Y+AcdWvuvD1oRD3f1rw6GoIyEy7pviNPa+ray1eKCingA9LFsq4CCksNT5j1XL7VuQTq1us3dC3jClhKvXL77jtv0CMzt+mp2Tt06cVrA/e4nghajB2is+lDUCenD+4/rk1t59vZyzwIc9irhf08XFrVxY59xoF0EbALKOwD+Ly7/uxdN0qSPti2YYYUHAzvO/K03rjxslXrtN97y8bAIP7eWzauugAIO4eoI+2W+sLiynmGjQRbj3vgaF0Xre3/lmYOe7VeP49+Xey4+AGSQ0q8gMJSw5PrKqFpzbBg+HfffUF/1pGWnrr2cu09dEr1hcWVeeWHnzi9sltWr3MYRn1hMVKnsygFZ2y12W3Xji364P7jCrqUau9ixz7jQLoYYRdQWEeyny6dC01rhgXX9rRoy/S22soxWiPm9o0G5o7V9fIry/G9oJiw1Waw6W01vfeWjT271LHPOJA+RtgFFNRA4dbrN+ivjjwd+Pjn2kbKYfd3CpvTjNrze1wmqxW9sny+q9sTgbq3e6e3rmROgqrA02rKAeACAnZBda6L3D57OPSx/ZZcBaU9szh3Wa1MaPedjbXZ7Sn79uIoAky4fmtpWWsLpIuUeEn0CrDn3HtWfwelPbM2d9kZmHul7AEgjwjYJXFZR7/uTq7uJVtB1d8tQXOaaalMWFdg3n3gJMuQABQKKfESmDtW18tn+xeBuRqFWVHmKKe31TT/gxd0/6PPDLxUK04Xr12jV5bPr7ptMaC4ruW5hcXIHbvo7AUgS0YK2Gb265J2S/p5STe7+3zI494q6c8lTUj6tLvPjnJcDGbvoVOBTUw61SaremTmtkjP2dpOM81gLakrWPdzWTV8aRtbcwLIslFT4t+WtFPS18MeYGYTkj4p6W2SXifpPWb2uhGPiwFEKRAbdInOIHtWp2H9ukrgMiSz7vXaQalyOnsByJqRAra7P+7u/T7Bbpb0pLt/z93PSvqcpLtGOS4GE1Yg1q9VaS9ZrBJvae3ktWfn1lVd2vbs3KqFZm/zTp2vh85eKJPOtsQUZ2ZTEnPYNUnPtH3/rKQ3JXBcNAVtVzns2uTWvG66ifBwE2Zdr6s1D7330CldVq2s7NnbrvOihs5eKAumf/Kj7wjbzL5mZt8O+DeWUbKZ3WNm82Y2f/o0uyrFYXpbLXC0OUywbvUbz6rz7iuvK6g/+stnl7s2CAmaDqCzF8qC6Z/86DvCdve3jHiMuqRr2r6/unlb2PH2SdonSVNTU1kdyOVOv6YXUSqixz1vbWoUhZlpZVvOQbWPgIPOd+mca/26itZdtLbna6WzF8qC6Z/8SCIl/g1J15nZZjUC9bsl/UYCx0UfrSBdX1iUafXOV0EpsXH+AXdWqG+aOTjwc1QmbNUIOOx8F84s6dgf/Urf56OzF8qA6Z/8GKnozMx+1cyelfQLkg6a2aHm7VeZ2YOS5O7Lkt4v6ZCkxyV93t1PjnbaGFVnerszlRGUEptc17v5yrCCUs21IT4sljuWroV94PBBBFzA9E9+jDTCdvcvS/pywO3PSbq97fsHJT04yrEQryjp7fYR6tyxun7y0/h34DJT4Hz6rh1bBt5IxNXY5/sD+4+r1tzw5IGj9a5iOz6IgAuY/skPOp2VVJT0dvtIdPeBk1o6H39Jwdo1wV3Mp7fVtPvAycCK7l47i7Wn9R84WtfdN9X08BOn+SACemD6Jx8I2CUVNm/V0j4SnTtWDwyccVg659p76FTgh8XuO28IXI529021rpFzkMWlc3r4idORu7ehHGg5i7wiYJdUv5TzxWvX6IP7j2vvoVM6E6EP+SieW1jUH849ttKXfMJM73nTNbp3equk4FTd1LWX6w8+f6Jva1QqXdGONcfIM/OUe0H3MjU15fPzge3JEYMbP/pQ4Mi5vWI8CZdeNKGXzwaPlmt9NufoHIEH/f+MsNGyffZwYGaJ9wmywsyOuvtU0H2MsEumPR04ua6iyhpbNTeddLCWFBqspd4joNb3YSPtsL28UV6sOUaesR92iXR2/nrxzJJk0mS1stIBLYv5ll5dl6a31XS+RwEaaU60Y6kf8oyAXSJhnb8uvXitnpq9Q4/M3Ba6/nmyWllpbTpZrejSiyYCHzeoaiXaW7C+sKhNMwe1aeagbvzoQ6s2Jwj7sB1mLTeKjTXHyDNS4iUSJR0YtlHI7jtv6BqttndKG9YllQmdO+86G2G/7paFxSXt+sIJSY0RdNg58yGMTqw5Rp4RsEskSgvCQT7QWms3N88cHDqV/uKZJVUmgtdi97J0/sJysLQ+hFkelE+sOUZeEbBLJOpINOgDrVdw6remu5cJMy0FjK6tWf3W60KgPTMwjg/hXq+Z5UEAksYcdokMu81m0DaVH/rSY/rDucdCl8lEUZkI71gml56avaPnPPQ4C4XCXnNr7pwtCQEkrXQj7LKnMYcZiYYFp/uOPD10Knz9uoo+8o4bQufAW8F4144t2vXFE12j8MoaG+scda+APL2txvIgIOfyGAtKFbBJY0bT+UYOG0EPE6zXr6t0bW3ZL01/6UVrVzV4maxWAovg4tQvILMlIZBfeY0FpUqJk8bsLygVPHhJWLgXzyytpJVbFwaLS+c0YY2jtKfpW+fSHqzDKtbj1m+9LsuDgPzKaywoVcAmjdlf0BvZpa6gPUoQb81/t+/Hfc59JeC1V32n9UfVLyAPWw8AIH15jQWlSomTxuwv7A3ragSlVpo8aK/pdpUJk1yBW3IuLp1b2eij8/Y/+PyF9dVp/lFFWSrG8iAgn/IaC0oVsGmw0V/YGzloc4Spay9fCWiXVSsykxbOLK0EN0mhO4KFVYefc9euL5zQR79yMnSOPKk/KgIyUEx5jQWlCth0OepvkDdylIAWVgU+YeFLupbOe6PPeYA8/FEByLa8xgK210SXoOUO0nBv7qAtMKuVCd19U61nSj1Ir602AaAI2F4TA+kcOY+yBKLXlezUtZeHbo3ZyST2KwZQagRs9NWviUg/Yanz1m2dI/AgWS8GAYBxI2Cjr2GrtaN0EuocgV9Wrejls8urOpsxbw0ABGxEMMwSiEHS6EEp+LwVgwDAuBGw0dcwSyBGSaOznAoAuhGw0dcwSyDy2kkIALKKgI1IBh315rWTEABkVal6iSM5494cY+5YXdtnD2vzzEFtnz28sqEIABQVI2yMxTg7CeV1azwAGAUBG2MTd/FYq3o8KNU+yLpwAMgjAjZyIajFaScK2gAUGXPYyIWgZWKdKGgDUGQEbORCv9Ez3dAAFB0pceRC2DKxlj07tzJ/jVTRoQ/jRsAeEH+Ug4nr57VrxxZ9cP9xBe3rVZus8jtAqli5gCSQEh9A64+yvrAo14U/StYAB4vz5zW9rab33rJR1nE7qXBkQa9WvEBcCNgD4I9yMHH/vO6d3qo/e9eNqk1WZWqMrEmFIwtoxYskkBIfAH+UgxnHz4uNQZBFtOJFEhhhDyDsj48/ymD8vFAW427FK9GOFwTsgSTxR1kk/LxQFtPbatqzc+vYpmuon4FESnwg4+yPXUT8vFAm45yuGWV/eRQHAXtAzKEOhp8XMDrqZyCNmBI3s183s5Nmdt7Mpno87vtm9piZHTez+VGOCQBlQz0IpNHnsL8taaekr0d47K3ufqO7hwb2tFHUASCLqAeBNGJK3N0flySzznYW+UOnIgBZRT0IpOTmsF3SQ2bmkv69u+9L6LiRUdQBIMuoB0HfgG1mX5P02oC7Puzufx3xOL/k7nUz+0eSvmpmT7h7YBrdzO6RdI8kbdy4MeLTj46iDgBAlvUN2O7+llEP4u715n9/aGZflnSzQua9m6PvfZI0NTUVtNfDWNCpCACQZWNvnGJml5rZq1tfS/oVNYrVMoWiDgBAlo00h21mvyrp/5C0QdJBMzvu7jvM7CpJn3b32yW9RtKXm4VpayX9X+7+f4943rGjqKOY2A4VQFGMWiX+ZUlfDrj9OUm3N7/+nqQ3jHKcJPDBXjxU/gMoEnqJiz69RcV2qACKhNakYklXUVH5H68oWSgyVcnhZ10+BGzxwV5UVP7HJ8r0AlMQyeFnXU6kxEWf3qKi8j8+UaYXmIJIDj/rciJgiw/2ohr3HsVZFndf/ChZKDJVyeFnXU6kxMWSriIrYzvHcaRLo0wvMAWRHH7W5cQIu2l6W02PzNymp2bv0CMzt5XuQx7FMY50aZQsFJmq5PCzLidG2EDBjCNdGiULRaYqOfysy8ncE2vXPbCpqSmfn59P+zSAXNk+ezgwXVqbrOqRmdtSOCMAUZnZUXefCrqPlDhQMKRLUQRxF04WASlxoGBIlyLvWGcejIANFFAZq+NRHHSfDEZKHACQKawzD0bABgBkCt0ngxGwAQCZQuFkMOawUXrsegRkC4WTwQjYKDWqUYFsonCyGylxlBq7HgHIC0bYKDWqUZFVTNWgEwEbpcauR4gi6eDJVA2CkBJHqVGNin5awbO+sCjXheA5zlaZTNUgCAEbpTa9raY9O7eqNlmVqbFBxp6dWxnFYEUawZOpGgQhJY7SoxoVvaQRPJmqQRBG2ADQQxpdt5iqQRACNgD0kEbwZKoGQUiJA0APaXXdYqoGnQjYANAHwRNZQEocAIAcIGADAJADpMQBoAdahCIrCNgAEIIWocgSAjaAUooycu7V5YyAjaQRsAGUTtSRMy1CkSUUnQEonaj9wdPocgaEIWADKJ2oI2dahMZn7lhd22cPa/PMQW2fPTzW3c6KipQ4gNKJurlGWl3OiobivXgQsAGUzq4dW1YFECl85EyXs9FRvBcPAnYBsW4U6I2Rc7Io3osHAbtgSD0B0TByTg77e8eDorOCiVr9CgBJoXgvHoywC4bUE4CsYQoiHiMFbDPbK+kdks5K+q6k33H3hYDHvVXSn0uakPRpd58d5bgIR+oJQBYxBTG6UVPiX5X0T9z99ZL+s6QPdT7AzCYkfVLS2yS9TtJ7zOx1Ix4XIUg9AUAxjRSw3f0hd19ufntE0tUBD7tZ0pPu/j13Pyvpc5LuGuW4CDe9raY9O7eqNlmVSapNVrVn51aubAEg5+Kcw/5nkvYH3F6T9Ezb989KelOMx0UHUk8AUDx9A7aZfU3SawPu+rC7/3XzMR+WtCzpvlFPyMzukXSPJG3cuHHUpwMAoBD6Bmx3f0uv+83sfZLeLumX3d0DHlKXdE3b91c3bws73j5J+yRpamoq6PkAACidkeawm9Xf/1LSne5+JuRh35B0nZltNrOLJL1b0oFRjgsAQNmMWiX+CUmvlvRVMztuZp+SJDO7yswelKRmUdr7JR2S9Likz7v7yRGPCwBAqYxUdObu/zjk9uck3d72/YOSHhzlWAAAlBmtSQEAyAECNgAAOUDABgAgBwjYAADkAAEbAIAcIGADAJADBGwAAHKAgA0AQA4QsAEAyAECNgAAOUDABgAgByx4R8xsMLPTkn4w5P9+haR/iPF00lSk1yIV6/UU6bVIvJ4sK9JrkYr1euJ8Lde6+4agOzIdsEdhZvPuPpX2ecShSK9FKtbrKdJrkXg9WVak1yIV6/Uk9VpIiQMAkAMEbAAAcqDIAXtf2icQoyK9FqlYr6dIr0Xi9WRZkV6LVKzXk8hrKewcNgAARVLkETYAAIVRmIBtZnvN7Akz+5aZfdnMJkMe91YzO2VmT5rZTNLnGYWZ/bqZnTSz82YWWnloZt83s8fM7LiZzSd5joMY4PXk4XdzuZl91cz+S/O/60Med675ezluZgeSPs9++v2szexiM9vfvP9RM9uU/FlGE+G1vM/MTrf9Pn4vjfOMwsw+Y2Y/NLNvh9xvZvZvmq/1W2b2xqTPcRARXs+bzeyltt/NHyV9jlGZ2TVm9rCZfaf5efYvAh4z3t+Puxfin6RfkbS2+fUfS/rjgMdMSPqupJ+VdJGkE5Jel/a5B5znz0vaIulvJU31eNz3JV2R9vnG8Xpy9Lv5E0kzza9ngt5nzft+kva59ngNfX/Wkv4nSZ9qfv1uSfvTPu8RXsv7JH0i7XON+Hr+O0lvlPTtkPtvl/QfJZmkWyQ9mvY5j/h63izpb9I+z4iv5UpJb2x+/WpJ/zngvTbW309hRtju/pC7Lze/PSLp6oCH3SzpSXf/nruflfQ5SXcldY5Rufvj7n4q7fOIS8TXk4vfjRrn9Nnm15+VNJ3iuQwrys+6/XV+UdIvm5kleI5R5eV9E4m7f13SCz0ecpekv/SGI5ImzezKZM5ucBFeT264+/Pu/s3m1/9N0uOSah0PG+vvpzABu8M/U+Mqp1NN0jNt3z+r7h94nrikh8zsqJndk/bJjCgvv5vXuPvzza//q6TXhDzuEjObN7MjZpa1oB7lZ73ymOaF8EuSfiaRsxtM1PfN3c0U5RfN7JpkTm0s8vJ3MohfMLMTZvYfzeyGtE8miuYU0TZJj3bcNdbfz9q4nigJZvY1Sa8NuOvD7v7Xzcd8WNKypPuSPLdBRXktEfySu9fN7B9J+qqZPdG8ok1cTK8nE3q9lvZv3N3NLGyZxbXN383PSjpsZo+5+3fjPldE8hVJ97v7K2b2P6iRObgt5XNCwzfV+Fv5iZndLmlO0nUpn1NPZvYqSQ9I+oC7/zjJY+cqYLv7W3rdb2bvk/R2Sb/szQmFDnVJ7VfXVzdvS1y/1xLxOerN//7QzL6sRnowlYAdw+vJxe/GzP7ezK509+ebqa4fhjxH63fzPTP7WzWuxrMSsKP8rFuPedbM1kq6TNKPkjm9gfR9Le7eft6fVqMOIa8y83cSh/aA5+4Pmtm/NbMr3D2TPcbNrKJGsL7P3b8U8JCx/n4KkxI3s7dK+peS7nT3MyEP+4ak68xss5ldpEYxTeYqeKMws0vN7NWtr9UougusxMyJvPxuDkj67ebXvy2pK3tgZuvN7OLm11dI2i7pO4mdYX9Rftbtr/PXJB0OuQhOW9/X0jGHeKcac495dUDSbzWrkW+R9FLbFE3umNlrW7URZnazGjEpixeGap7nX0h63N3/dcjDxvv7SbvyLq5/kp5UY+7gePNfq8L1KkkPtj3udjWq+76rRro29XMPeC2/qsbcxyuS/l7Soc7XokZV7Inmv5NZfS1RX0+Ofjc/I+n/kfRfJH1N0uXN26ckfbr59S9Keqz5u3lM0u+mfd4Br6PrZy3pY2pc8ErSJZK+0Py7+k+Sfjbtcx7htexp/o2ckPSwpOvTPucer+V+Sc9LWmr+zfyupN+X9PvN+03SJ5uv9TH1WEWShX8RXs/72343RyT9Ytrn3OO1/JIadUPfaosztyf5+6HTGQAAOVCYlDgAAEVGwAYAIAcI2AAA5AABGwCAHCBgAwCQAwRsAABygIANAEAOELABAMiB/x/KafxiKBu8UAAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "outliers_percentage = 0.35\n",
    "inliers = 300\n",
    "outliers = int(inliers * outliers_percentage)\n",
    "\n",
    "\n",
    "data = make_blobs(centers=[[2, 2], [-2, -2]], cluster_std=[.3, .3],\n",
    "                  n_samples=inliers, random_state=0)[0]\n",
    "\n",
    "data = scale(data)\n",
    "data = np.concatenate([data, \n",
    "                       (np.random.rand(outliers, 2)-.5)*4.])\n",
    "\n",
    "plt.figure(figsize=(8, 8))\n",
    "plt.scatter(data[:, 0], data[:, 1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "What we expect from a good outlier algorithm is that all the samples far away from the two main clusters are labeled as outliers. This can be obtained considering as outliers the samples with a high quantization error.\n",
    "\n",
    "To test this idea we have to 1) train a SOM, 2) compute the quantization error, 3) set a treshold for the quantization error:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\r",
      " [   0 / 100 ]   0% - ? it/s\r",
      " [   0 / 100 ]   0% - ? it/s\r",
      " [   1 / 100 ]   1% - 0:00:00 left \r",
      " [   2 / 100 ]   2% - 0:00:00 left \r",
      " [   3 / 100 ]   3% - 0:00:00 left \r",
      " [   4 / 100 ]   4% - 0:00:00 left \r",
      " [   5 / 100 ]   5% - 0:00:00 left \r",
      " [   6 / 100 ]   6% - 0:00:00 left \r",
      " [   7 / 100 ]   7% - 0:00:00 left \r",
      " [   8 / 100 ]   8% - 0:00:00 left \r",
      " [   9 / 100 ]   9% - 0:00:00 left \r",
      " [  10 / 100 ]  10% - 0:00:00 left \r",
      " [  11 / 100 ]  11% - 0:00:00 left \r",
      " [  12 / 100 ]  12% - 0:00:00 left \r",
      " [  13 / 100 ]  13% - 0:00:00 left \r",
      " [  14 / 100 ]  14% - 0:00:00 left \r",
      " [  15 / 100 ]  15% - 0:00:00 left \r",
      " [  16 / 100 ]  16% - 0:00:00 left \r",
      " [  17 / 100 ]  17% - 0:00:00 left \r",
      " [  18 / 100 ]  18% - 0:00:00 left \r",
      " [  19 / 100 ]  19% - 0:00:00 left \r",
      " [  20 / 100 ]  20% - 0:00:00 left \r",
      " [  21 / 100 ]  21% - 0:00:00 left \r",
      " [  22 / 100 ]  22% - 0:00:00 left \r",
      " [  23 / 100 ]  23% - 0:00:00 left \r",
      " [  24 / 100 ]  24% - 0:00:00 left \r",
      " [  25 / 100 ]  25% - 0:00:00 left \r",
      " [  26 / 100 ]  26% - 0:00:00 left \r",
      " [  27 / 100 ]  27% - 0:00:00 left \r",
      " [  28 / 100 ]  28% - 0:00:00 left \r",
      " [  29 / 100 ]  29% - 0:00:00 left \r",
      " [  30 / 100 ]  30% - 0:00:00 left \r",
      " [  31 / 100 ]  31% - 0:00:00 left \r",
      " [  32 / 100 ]  32% - 0:00:00 left \r",
      " [  33 / 100 ]  33% - 0:00:00 left \r",
      " [  34 / 100 ]  34% - 0:00:00 left \r",
      " [  35 / 100 ]  35% - 0:00:00 left \r",
      " [  36 / 100 ]  36% - 0:00:00 left \r",
      " [  37 / 100 ]  37% - 0:00:00 left \r",
      " [  38 / 100 ]  38% - 0:00:00 left \r",
      " [  39 / 100 ]  39% - 0:00:00 left \r",
      " [  40 / 100 ]  40% - 0:00:00 left \r",
      " [  41 / 100 ]  41% - 0:00:00 left \r",
      " [  42 / 100 ]  42% - 0:00:00 left \r",
      " [  43 / 100 ]  43% - 0:00:00 left \r",
      " [  44 / 100 ]  44% - 0:00:00 left \r",
      " [  45 / 100 ]  45% - 0:00:00 left \r",
      " [  46 / 100 ]  46% - 0:00:00 left \r",
      " [  47 / 100 ]  47% - 0:00:00 left \r",
      " [  48 / 100 ]  48% - 0:00:00 left \r",
      " [  49 / 100 ]  49% - 0:00:00 left \r",
      " [  50 / 100 ]  50% - 0:00:00 left \r",
      " [  51 / 100 ]  51% - 0:00:00 left \r",
      " [  52 / 100 ]  52% - 0:00:00 left \r",
      " [  53 / 100 ]  53% - 0:00:00 left \r",
      " [  54 / 100 ]  54% - 0:00:00 left \r",
      " [  55 / 100 ]  55% - 0:00:00 left \r",
      " [  56 / 100 ]  56% - 0:00:00 left \r",
      " [  57 / 100 ]  57% - 0:00:00 left \r",
      " [  58 / 100 ]  58% - 0:00:00 left \r",
      " [  59 / 100 ]  59% - 0:00:00 left \r",
      " [  60 / 100 ]  60% - 0:00:00 left \r",
      " [  61 / 100 ]  61% - 0:00:00 left \r",
      " [  62 / 100 ]  62% - 0:00:00 left \r",
      " [  63 / 100 ]  63% - 0:00:00 left \r",
      " [  64 / 100 ]  64% - 0:00:00 left \r",
      " [  65 / 100 ]  65% - 0:00:00 left \r",
      " [  66 / 100 ]  66% - 0:00:00 left \r",
      " [  67 / 100 ]  67% - 0:00:00 left \r",
      " [  68 / 100 ]  68% - 0:00:00 left \r",
      " [  69 / 100 ]  69% - 0:00:00 left \r",
      " [  70 / 100 ]  70% - 0:00:00 left \r",
      " [  71 / 100 ]  71% - 0:00:00 left \r",
      " [  72 / 100 ]  72% - 0:00:00 left \r",
      " [  73 / 100 ]  73% - 0:00:00 left \r",
      " [  74 / 100 ]  74% - 0:00:00 left \r",
      " [  75 / 100 ]  75% - 0:00:00 left \r",
      " [  76 / 100 ]  76% - 0:00:00 left \r",
      " [  77 / 100 ]  77% - 0:00:00 left \r",
      " [  78 / 100 ]  78% - 0:00:00 left \r",
      " [  79 / 100 ]  79% - 0:00:00 left \r",
      " [  80 / 100 ]  80% - 0:00:00 left \r",
      " [  81 / 100 ]  81% - 0:00:00 left \r",
      " [  82 / 100 ]  82% - 0:00:00 left \r",
      " [  83 / 100 ]  83% - 0:00:00 left \r",
      " [  84 / 100 ]  84% - 0:00:00 left \r",
      " [  85 / 100 ]  85% - 0:00:00 left \r",
      " [  86 / 100 ]  86% - 0:00:00 left \r",
      " [  87 / 100 ]  87% - 0:00:00 left \r",
      " [  88 / 100 ]  88% - 0:00:00 left \r",
      " [  89 / 100 ]  89% - 0:00:00 left \r",
      " [  90 / 100 ]  90% - 0:00:00 left \r",
      " [  91 / 100 ]  91% - 0:00:00 left \r",
      " [  92 / 100 ]  92% - 0:00:00 left \r",
      " [  93 / 100 ]  93% - 0:00:00 left \r",
      " [  94 / 100 ]  94% - 0:00:00 left \r",
      " [  95 / 100 ]  95% - 0:00:00 left \r",
      " [  96 / 100 ]  96% - 0:00:00 left \r",
      " [  97 / 100 ]  97% - 0:00:00 left \r",
      " [  98 / 100 ]  98% - 0:00:00 left \r",
      " [  99 / 100 ]  99% - 0:00:00 left \r",
      " [ 100 / 100 ] 100% - 0:00:00 left \n",
      " quantization error: 0.4655965288224112\n",
      "Error treshold: 0.3430036362711185\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/Users/giuseppe.vettigli/venv3/lib/python3.8/site-packages/minisom.py:154: UserWarning: Warning: sigma is too high for the dimension of the map.\n",
      "  warn('Warning: sigma is too high for the dimension of the map.')\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'frequency')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYUAAAEGCAYAAACKB4k+AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8li6FKAAAWa0lEQVR4nO3df/BddX3n8edLRAV1RUlkIwSDXWDE3TVihiJunbTQVamILhRwC4LjNoxiNTM4I1Bc3YJUZ8CytgsSq8sPrRBBa0CoQmqkbgQN7Ff5ZTSruIRBftUCEocWfO8f9+T43fBNckNyv5/vj+dj5k7O/Zxz730dbrjvfD7nnM9JVSFJEsCzWgeQJE0dFgVJUs+iIEnqWRQkST2LgiSp9+zWAbbHnDlzasGCBa1jbJe1a9cCsP/++zdOImm2uOWWWx6qqrkTrZvWRWHBggWsWbOmdYztsnjxYgBWrVrVNIek2SPJzza3zuEjSVJvWvcUZoIzzzyzdQRJ6lkUGjvssMNaR5CknsNHjY2NjTE2NtY6hiQB9hSaW7p0KeCBZklTgz0FSVLPoiBJ6lkUJEk9i4IkqTdrDzQvOO1rzT777o//Qb98zjnnNMshSZuatUVhqjjkkENaR5CknsNHja1evZrVq1e3jiFJgD2F5s444wzA6xQkTQ32FCRJPYuCJKlnUZAk9UZWFJLMT/LNJHcmuSPJB7r2jya5N8lY9zh83GtOT7IuydokbxxVNknSxEZ5oPlJ4NSqujXJC4FbklzfrfuLqjp3/MZJDgCOA14FvAy4Icl+VfXUCDM2d/7557eOIEm9kRWFqroPuK9bfizJXcCeW3jJkcDlVfUE8NMk64CDgO+MKuNUsHDhwtYRJKk3KccUkiwAXgPc3DW9L8kPknwuyYu7tj2Be8a9bD0TFJEkS5KsSbLmwQcfHGHqyXHDDTdwww03tI4hScAkFIUkLwCuApZW1aPAhcBvAQsZ9CTO25b3q6plVbWoqhbNnTt3h+edbGeffTZnn3126xiSBIy4KCTZmUFB+EJVfRmgqu6vqqeq6tfAZxgMEQHcC8wf9/K9ujZJ0iQZ5dlHAT4L3FVVnxzXPm/cZm8Hbu+WVwDHJXlukn2AfYHvjiqfJOnpRnn20euBE4Dbkmy8CfEZwDuSLAQKuBs4GaCq7kiyHLiTwZlLp8z0M48kaaoZ5dlH3wYywaprt/CajwEfG1UmSdKWOSFeYxdddFHrCJLUsyg0tv/++7eOIEk95z5q7Oqrr+bqq69uHUOSAHsKzZ133uAyjSOOOKJxEkmypyBJGseiIEnqWRQkST2LgiSp54Hmxi677LLWESSpZ1FobP78+VvfSJImicNHjV1xxRVcccUVrWNIEmBPobkLL7wQgGOPPbZxEkmypyBJGseiIEnqWRQkST2LgiSp54Hmxq688srWESSpZ1FobM6cOa0jSFLP4aPGLr74Yi6++OLWMSQJsCg0Z1GQNJVYFCRJPYuCJKlnUZAk9SwKkqSep6Q2du2117aOIEk9i0Jju+66a+sIktRz+KixCy64gAsuuKB1DEkCLArNLV++nOXLl7eOIUmARUGSNI5FQZLUG1lRSDI/yTeT3JnkjiQf6NpfkuT6JD/u/nxx154kn0qyLskPkhw4qmySpImNsqfwJHBqVR0AHAyckuQA4DRgZVXtC6zsngO8Gdi3eywBLhxhNknSBEZ2SmpV3Qfc1y0/luQuYE/gSGBxt9klwCrgQ137pVVVwE1Jdksyr3ufGWvVqlWtI0hSb1KOKSRZALwGuBnYY9wP/c+BPbrlPYF7xr1sfde26XstSbImyZoHH3xwZJklaTYaeVFI8gLgKmBpVT06fl3XK6hteb+qWlZVi6pq0dy5c3dg0jbOPfdczj333NYxJAkYcVFIsjODgvCFqvpy13x/knnd+nnAA137vcD8cS/fq2ub0a655hquueaa1jEkCRjt2UcBPgvcVVWfHLdqBXBit3wi8NVx7e/szkI6GHhkph9PkKSpZpRzH70eOAG4LclY13YG8HFgeZJ3Az8DjunWXQscDqwDNgDvGmE2SdIERnn20beBbGb1oRNsX8Apo8ojSdo6Z0ltbJdddmkdQZJ6FoXGrrvuutYRJKnn3EeSpJ5FobGzzjqLs846q3UMSQIsCs2tXLmSlStXto4hSYBFQZI0jkVBktSzKEiSep6S2tjuu+/eOoIk9SwKjV111VWtI0hSz+EjSVLPotDY6aefzumnn946hiQBDh81953vfKd1BEnq2VOQJPUsCpKknkVBktTzmEJje+21V+sIktSzKDT2+c9/vnUESeo5fCRJ6lkUGlu6dClLly5tHUOSgCGGj5LsXlUPT0aY2WhsbKx1BEnqDdNTuCnJl5IcniQjTyRJamaYorAfsAw4AfhxknOS7DfaWJKkFrZaFGrg+qp6B/DHwInAd5N8K8nrRp5QkjRphjqmABzPoKdwP/AnwApgIfAlYJ9RBpzp9tvPTpekqWOY6xS+A1wGvK2q1o9rX5Pk06OJNXssW7asdQRJ6g1TFPavqppoRVV9YgfnkSQ1NMyB5m8k2W3jkyQvTvL1EWaaVZYsWcKSJUtax5AkYLiewtyq+qeNT6rqF0leOsJMs8qPfvSj1hEkqTdMT+GpJHtvfJLk5cCEw0mSpOltmJ7CnwLfTvItIMDvAI53SNIMNMx1Cn8HHAhcAVwOvLaqtnpMIcnnkjyQ5PZxbR9Ncm+Sse5x+Lh1pydZl2Rtkjc+s92RJG2PYafOfi7wj932ByShqm7cymsuBv4KuHST9r+oqnPHNyQ5ADgOeBXwMuCGJPtV1VND5pu2Fi5c2DqCJPWGuXjtE8CxwB3Ar7vmArZYFKrqxiQLhsxxJHB5VT0B/DTJOuAgBtdIzGjnn39+6wiS1Bump/A2BtcqPLGDPvN9Sd4JrAFOrapfAHsCN43bZn3X9jRJltAd09h7770n2kSS9AwNc/bRT4Cdd9DnXQj8FoMpMu4DztvWN6iqZVW1qKoWzZ07dwfFauf444/n+OOPbx1DkoDhegobgLEkK4G+t1BV79/WD6uq+zcuJ/kMcE339F5g/rhN9+raZrz169dvfSNJmiTDFIUV3WO7JZlXVfd1T98ObDwzaQXwN0k+yeBA877Ad3fEZ0qShrfVolBVlyTZBdi7qtYO+8ZJvggsBuYkWQ98BFicZCGDA9V3Ayd3n3FHkuXAncCTwCmz4cwjSZpqhjn76AjgXOA5wD7dj/qfVdVbt/S67v4Lm/rsFrb/GPCxreWRJI3OMMNHH2VweugqgKoaS/KKEWaaVV73Ou9TJGnqGKYo/EtVPbLJ7Zl/vbmNtW3+/M//vHUESeoNUxTuSPKfgZ2S7Au8H1g92liSpBaGuU7hTxhMP/EE8EXgUWDpKEPNJkcddRRHHXVU6xiSBAx39tEGBjOl/uno48w+Dz/8cOsIktQb5uyjbzLB/ROq6vdGkkiS1MwwxxQ+OG75ecBRDK4lkCTNMMMMH92ySdP/SuLVxpI0Aw0zfPSScU+fBbwWeNHIEs0yhx56aOsIktQbZvjoFgbHFMJg2OinwLtHGWo2+fCHP9w6giT1hhk+2mcygkiS2htm+Og/bWl9VX15x8WZfd785jcDcN111zVOIknDDR+9GzgE+Pvu+e8yuKL5QQbDShaF7fCrX/2qdQRJ6g1TFHYGDth4H4Qk84CLq+pdI00mSZp0w0xzMX/cjXEA7ge8ObIkzUDD9BRWJvk6g3mPAI4FbhhdJElSK8OcffS+JG8H3tA1Lauqr4w21uzxlre8pXUESeoN01MAuBV4rKpuSLJrkhdW1WOjDDZbfPCDH9z6RpI0SbZ6TCHJHwNXAhd1TXsCfzvKUJKkNoY50HwK8HoG91Ggqn4MvHSUoWaTxYsXs3jx4tYxJAkYrig8UVX/vPFJkmczwVTakqTpb5ii8K0kZwC7JPl94EvA1aONJUlqYZiicBqDq5dvA04GrgXOHGUoSVIbWzz7KMlOwKVV9UfAZyYnkiSplS0Whap6KsnLkzxn/HEF7TjHHHNM6wiS1BvmOoWfMLjb2grg8Y2NVfXJkaWaRd773ve2jiBJvc0eU0hyWbf4VuCabtsXjntoB9iwYQMbNmxoHUOSgC33FF6b5GXA/wX+cpLyzDqHH344AKtWrWobRJLYclH4NLAS2AdYM649DK5TeMUIc0mSGtjs8FFVfaqqXgn8z6p6xbjHPlVlQZCkGWir1ylU1XueyRsn+VySB5LcPq7tJUmuT/Lj7s8Xd+1J8qkk65L8IMmBz+QzJUnbZ5iL156pi4E3bdJ2GrCyqvZlMDR1Wtf+ZmDf7rEEuHCEuSRJmzHs1NnbrKpuTLJgk+YjgcXd8iXAKuBDXfulVVXATUl2SzJvkzu+zUgnnXRS6wiS1BtZUdiMPcb90P8c2KNb3hO4Z9x267u2pxWFJEsY9CbYe+/pf1dQi4KkqWSUw0db1PUKtnm21apaVlWLqmrR3LlzR5Bscj300EM89NBDrWNIEjD5PYX7Nw4LJZkHPNC13wvMH7fdXl3bjHf00UcDXqcgaWqY7J7CCuDEbvlE4Kvj2t/ZnYV0MPDIbDieIElTzch6Ckm+yOCg8pwk64GPAB8Hlid5N/AzYONscNcChwPrgA3Au0aVS5K0eaM8++gdm1l16ATbFoPbfkqSGmp2oFmSNPVM9oFmbeI973lGF4xL0khYFBo79thjW0eQpJ7DR43dc8893HPPPVvfUJImgT2Fxk444QTA6xQkTQ32FCRJPYuCJKlnUZAk9SwKkqSeB5obO/XUU1tHkKSeRaGxI444onUESeo5fNTY2rVrWbt2besYkgTYU2ju5JNPBrxOQdLUYE9BktSzKEiSehYFSVLPoiBJ6nmgubEzzzyzdQRJ6lkUGjvssMNaR5CknsNHjY2NjTE2NtY6hiQB9hSaW7p0KeB1CpKmBnsKkqSeRUGS1LMoSJJ6FgVJUs8DzY2dc845rSNIUs+i0NghhxzSOoIk9Rw+amz16tWsXr26dQxJAuwpNHfGGWcAXqcgaWqwpyBJ6jXpKSS5G3gMeAp4sqoWJXkJcAWwALgbOKaqftEinyTNVi17Cr9bVQuralH3/DRgZVXtC6zsnkuSJtFUGj46ErikW74EeFvDLJI0K7U60FzAN5IUcFFVLQP2qKr7uvU/B/aY6IVJlgBLAPbee+/JyDpS559/fusIktRrVRT+Q1Xdm+SlwPVJfjh+ZVVVVzCepisgywAWLVo04TbTycKFC1tHkKRek6JQVfd2fz6Q5CvAQcD9SeZV1X1J5gEPtMg2GRac9rV++Vd3D+6lsMuC0ReHuz/+ByP/DEnT26QfU0jy/CQv3LgM/EfgdmAFcGK32YnAVyc7WwuPrL6cR1Zf3jqGJAFtegp7AF9JsvHz/6aq/i7J94DlSd4N/Aw4pkE2SZrVJr0oVNVPgFdP0P4wcOhk55Ek/cZUOiVVktSYRUGS1HNCvMZ2f+P7WkeQpJ5FobGdd9+rdQRJ6jl81NiGdTezYd3NrWNIEmBPoblHv/sVAHb9N7/dOIkk2VOQJI1jUZAk9SwKkqSeRUGS1PNAc2Nz3nJq6wiS1LMoNPbsfzW3dQRJ6jl81Njjd93I43fd2DqGJAH2FJp77H9fC8DzX/mGxkkkyZ6CJGkcewqaFONvQTqZvAWptG3sKUiSehYFSVLP4aPG5r7t9NYRJKlnUWhsp11f1DqCJPUsCo398rYbAHjBvzts5J/V6mCvpOnDotDYZBYFTS7PuNJ0ZFHQjGbvSNo2nn0kSerZU5BmGIettD3sKUiSevYUGnvpH360dQRJ6lkUGnvWzs9rHUGSeg4fNfbYrV/jsVs9Q0bS1GBRaOzxH/4Dj//wH1rHkCTAoiBJGmfKHVNI8ibgvwM7AX9dVR9vHEnSEGbjhYIz8TTcKVUUkuwE/A/g94H1wPeSrKiqO9smk6Sna1kIR1WQptrw0UHAuqr6SVX9M3A5cGTjTJI0a0ypngKwJ3DPuOfrgd8ev0GSJcCS7ukvk6x9hp81B3joGb52h/vZJ96yPS+fUvuynWbSvsDM2h/3ZQrJJ/rFZ7IvL9/ciqlWFLaqqpYBy7b3fZKsqapFOyBSc+7L1DWT9sd9mZp29L5MteGje4H5457v1bVJkibBVCsK3wP2TbJPkucAxwErGmeSpFljSg0fVdWTSd4HfJ3BKamfq6o7RvRx2z0ENYW4L1PXTNof92Vq2qH7kqrake8nSZrGptrwkSSpIYuCJKk344tCkjclWZtkXZLTJlj/3CRXdOtvTrJg8lMOZ4h9OSnJg0nGusd/aZFzGEk+l+SBJLdvZn2SfKrb1x8kOXCyMw5riH1ZnOSRcd/Lf53sjMNKMj/JN5PcmeSOJB+YYJtp8d0MuS/T4rtJ8rwk303y/W5f/tsE2+yY37KqmrEPBger/w/wCuA5wPeBAzbZ5r3Ap7vl44ArWufejn05Cfir1lmH3J83AAcCt29m/eHAdUCAg4GbW2fejn1ZDFzTOueQ+zIPOLBbfiHwown+nk2L72bIfZkW30333/oF3fLOwM3AwZtss0N+y2Z6T2GYaTOOBC7plq8EDk2SScw4rBk1BUhV3Qj84xY2ORK4tAZuAnZLMm9y0m2bIfZl2qiq+6rq1m75MeAuBjMNjDctvpsh92Va6P5b/7J7unP32PQsoR3yWzbTi8JE02Zs+pei36aqngQeAXaflHTbZph9ATiq69JfmWT+BOuni2H3d7p4Xdf1vy7Jq1qHGUY3/PAaBv8qHW/afTdb2BeYJt9Nkp2SjAEPANdX1Wa/l+35LZvpRWG2uRpYUFX/Hrie3/yrQW3dCry8ql4N/CXwt43zbFWSFwBXAUur6tHWebbHVvZl2nw3VfVUVS1kMNPDQUn+7Sg+Z6YXhWGmzei3SfJs4EXAw5OSbttsdV+q6uGqeqJ7+tfAaycp2yjMmClPqurRjV3/qroW2DnJnMaxNivJzgx+RL9QVV+eYJNp891sbV+m23cDUFX/BHwTeNMmq3bIb9lMLwrDTJuxAjixWz4a+PvqjtRMMVvdl03Gdd/KYAx1uloBvLM70+Vg4JGquq91qGciyb/eOLab5CAG/99NxX940OX8LHBXVX1yM5tNi+9mmH2ZLt9NkrlJduuWd2Fwz5kfbrLZDvktm1LTXOxotZlpM5L8GbCmqlYw+EtzWZJ1DA4WHtcu8eYNuS/vT/JW4EkG+3JSs8BbkeSLDM78mJNkPfARBgfPqKpPA9cyOMtlHbABeFebpFs3xL4cDbwnyZPAr4Djpug/PABeD5wA3NaNXwOcAewN0+67GWZfpst3Mw+4JIMbkT0LWF5V14zit8xpLiRJvZk+fCRJ2gYWBUlSz6IgSepZFCRJPYuCJKlnUZAk9SwK0g7UnUe+2edbeN2MvmZI04dFQdoGSY7v5rUfS3JRN0nZL5Ocl+T7DCZXuzvJJ5LcCvxhkoVJbuomKvxKkhd377UqyflJ1gBPm+tfasGiIA0pySuBY4HXdxOTPQX8EfB8BvcUeHVVfbvb/OGqOrCqLgcuBT7UTVR4G4Mrnjd6TlUtqqrzJm9PpM2zyyoN71AGkwx+r5suZxcG0xg/xWDStfGuAEjyImC3qvpW134J8KVNt5OmCouCNLwAl1TV6f9fY/LBqnpqk20fH/I9h91OmhQOH0nDWwkcneSlAElekuTlW3pBVT0C/CLJ73RNJwDf2sJLpKbsKUhDqqo7k5wJfCPJs4B/AU4Z4qUnAp9OsivwE6burKKSs6RKkn7D4SNJUs+iIEnqWRQkST2LgiSpZ1GQJPUsCpKknkVBktT7f5oCVG1jlPRkAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "som = MiniSom(2, 1, data.shape[1], sigma=1, learning_rate=0.5,\n",
    "              neighborhood_function='triangle', random_seed=10)\n",
    "\n",
    "\n",
    "som.train(data, 100, random_order=False, verbose=True)  # random training\n",
    "\n",
    "quantization_errors = np.linalg.norm(som.quantization(data) - data, axis=1)\n",
    "error_treshold = np.percentile(quantization_errors, \n",
    "                               100*(1-outliers_percentage)+5)\n",
    "\n",
    "print('Error treshold:', error_treshold)\n",
    "\n",
    "is_outlier = quantization_errors > error_treshold\n",
    "\n",
    "plt.hist(quantization_errors)\n",
    "plt.axvline(error_treshold, color='k', linestyle='--')\n",
    "plt.xlabel('error')\n",
    "plt.ylabel('frequency')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This histogram shows the frequency of the quantization error. The dashed line represents the treshold picked to label the outliers. We can see that most of the samples have a low quantization error and the errors higher than the treshold are much more rare. (Notice that we were able to set a good treshold as we knew the percentage of outliers in our data. This is usually a parameter to tune experimentally.)\n",
    "\n",
    "We are now ready to plot our dataset again highlighting the outliers with a different color:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 8))\n",
    "plt.scatter(data[~is_outlier, 0], data[~is_outlier, 1],\n",
    "            label='inlier')\n",
    "plt.scatter(data[is_outlier, 0], data[is_outlier, 1],\n",
    "            label='outlier')\n",
    "plt.legend()\n",
    "plt.savefig('resulting_images/som_outliers_detection.png')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can also try the same on a different dataset:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\r",
      " [   0 / 100 ]   0% - ? it/s\r",
      " [   0 / 100 ]   0% - ? it/s\r",
      " [   1 / 100 ]   1% - 0:00:00 left \r",
      " [   2 / 100 ]   2% - 0:00:00 left \r",
      " [   3 / 100 ]   3% - 0:00:00 left \r",
      " [   4 / 100 ]   4% - 0:00:00 left \r",
      " [   5 / 100 ]   5% - 0:00:00 left \r",
      " [   6 / 100 ]   6% - 0:00:00 left \r",
      " [   7 / 100 ]   7% - 0:00:00 left \r",
      " [   8 / 100 ]   8% - 0:00:00 left \r",
      " [   9 / 100 ]   9% - 0:00:00 left \r",
      " [  10 / 100 ]  10% - 0:00:00 left \r",
      " [  11 / 100 ]  11% - 0:00:00 left \r",
      " [  12 / 100 ]  12% - 0:00:00 left \r",
      " [  13 / 100 ]  13% - 0:00:00 left \r",
      " [  14 / 100 ]  14% - 0:00:00 left \r",
      " [  15 / 100 ]  15% - 0:00:00 left \r",
      " [  16 / 100 ]  16% - 0:00:00 left \r",
      " [  17 / 100 ]  17% - 0:00:00 left \r",
      " [  18 / 100 ]  18% - 0:00:00 left \r",
      " [  19 / 100 ]  19% - 0:00:00 left \r",
      " [  20 / 100 ]  20% - 0:00:00 left \r",
      " [  21 / 100 ]  21% - 0:00:00 left \r",
      " [  22 / 100 ]  22% - 0:00:00 left \r",
      " [  23 / 100 ]  23% - 0:00:00 left \r",
      " [  24 / 100 ]  24% - 0:00:00 left \r",
      " [  25 / 100 ]  25% - 0:00:00 left \r",
      " [  26 / 100 ]  26% - 0:00:00 left \r",
      " [  27 / 100 ]  27% - 0:00:00 left \r",
      " [  28 / 100 ]  28% - 0:00:00 left \r",
      " [  29 / 100 ]  29% - 0:00:00 left \r",
      " [  30 / 100 ]  30% - 0:00:00 left \r",
      " [  31 / 100 ]  31% - 0:00:00 left \r",
      " [  32 / 100 ]  32% - 0:00:00 left \r",
      " [  33 / 100 ]  33% - 0:00:00 left \r",
      " [  34 / 100 ]  34% - 0:00:00 left \r",
      " [  35 / 100 ]  35% - 0:00:00 left \r",
      " [  36 / 100 ]  36% - 0:00:00 left \r",
      " [  37 / 100 ]  37% - 0:00:00 left \r",
      " [  38 / 100 ]  38% - 0:00:00 left \r",
      " [  39 / 100 ]  39% - 0:00:00 left \r",
      " [  40 / 100 ]  40% - 0:00:00 left \r",
      " [  41 / 100 ]  41% - 0:00:00 left \r",
      " [  42 / 100 ]  42% - 0:00:00 left \r",
      " [  43 / 100 ]  43% - 0:00:00 left \r",
      " [  44 / 100 ]  44% - 0:00:00 left \r",
      " [  45 / 100 ]  45% - 0:00:00 left \r",
      " [  46 / 100 ]  46% - 0:00:00 left \r",
      " [  47 / 100 ]  47% - 0:00:00 left \r",
      " [  48 / 100 ]  48% - 0:00:00 left \r",
      " [  49 / 100 ]  49% - 0:00:00 left \r",
      " [  50 / 100 ]  50% - 0:00:00 left \r",
      " [  51 / 100 ]  51% - 0:00:00 left \r",
      " [  52 / 100 ]  52% - 0:00:00 left \r",
      " [  53 / 100 ]  53% - 0:00:00 left \r",
      " [  54 / 100 ]  54% - 0:00:00 left \r",
      " [  55 / 100 ]  55% - 0:00:00 left \r",
      " [  56 / 100 ]  56% - 0:00:00 left \r",
      " [  57 / 100 ]  57% - 0:00:00 left \r",
      " [  58 / 100 ]  58% - 0:00:00 left \r",
      " [  59 / 100 ]  59% - 0:00:00 left \r",
      " [  60 / 100 ]  60% - 0:00:00 left \r",
      " [  61 / 100 ]  61% - 0:00:00 left \r",
      " [  62 / 100 ]  62% - 0:00:00 left \r",
      " [  63 / 100 ]  63% - 0:00:00 left \r",
      " [  64 / 100 ]  64% - 0:00:00 left \r",
      " [  65 / 100 ]  65% - 0:00:00 left \r",
      " [  66 / 100 ]  66% - 0:00:00 left \r",
      " [  67 / 100 ]  67% - 0:00:00 left \r",
      " [  68 / 100 ]  68% - 0:00:00 left \r",
      " [  69 / 100 ]  69% - 0:00:00 left \r",
      " [  70 / 100 ]  70% - 0:00:00 left \r",
      " [  71 / 100 ]  71% - 0:00:00 left \r",
      " [  72 / 100 ]  72% - 0:00:00 left \r",
      " [  73 / 100 ]  73% - 0:00:00 left \r",
      " [  74 / 100 ]  74% - 0:00:00 left \r",
      " [  75 / 100 ]  75% - 0:00:00 left \r",
      " [  76 / 100 ]  76% - 0:00:00 left \r",
      " [  77 / 100 ]  77% - 0:00:00 left \r",
      " [  78 / 100 ]  78% - 0:00:00 left \r",
      " [  79 / 100 ]  79% - 0:00:00 left \r",
      " [  80 / 100 ]  80% - 0:00:00 left \r",
      " [  81 / 100 ]  81% - 0:00:00 left \r",
      " [  82 / 100 ]  82% - 0:00:00 left \r",
      " [  83 / 100 ]  83% - 0:00:00 left \r",
      " [  84 / 100 ]  84% - 0:00:00 left \r",
      " [  85 / 100 ]  85% - 0:00:00 left \r",
      " [  86 / 100 ]  86% - 0:00:00 left \r",
      " [  87 / 100 ]  87% - 0:00:00 left \r",
      " [  88 / 100 ]  88% - 0:00:00 left \r",
      " [  89 / 100 ]  89% - 0:00:00 left \r",
      " [  90 / 100 ]  90% - 0:00:00 left \r",
      " [  91 / 100 ]  91% - 0:00:00 left \r",
      " [  92 / 100 ]  92% - 0:00:00 left \r",
      " [  93 / 100 ]  93% - 0:00:00 left \r",
      " [  94 / 100 ]  94% - 0:00:00 left \r",
      " [  95 / 100 ]  95% - 0:00:00 left \r",
      " [  96 / 100 ]  96% - 0:00:00 left \r",
      " [  97 / 100 ]  97% - 0:00:00 left \r",
      " [  98 / 100 ]  98% - 0:00:00 left \r",
      " [  99 / 100 ]  99% - 0:00:00 left \r",
      " [ 100 / 100 ] 100% - 0:00:00 left \n",
      " quantization error: 0.3696783769236724\n"
     ]
    }
   ],
   "source": [
    "from sklearn.datasets import make_circles\n",
    "data = make_circles(noise=.1, n_samples=inliers, random_state=0)[0]\n",
    "data = scale(data)\n",
    "data = np.concatenate([data, \n",
    "                       (np.random.rand(outliers, 2)-.5)*4.])\n",
    "\n",
    "\n",
    "som = MiniSom(5, 5, data.shape[1], sigma=1, learning_rate=0.5,\n",
    "              neighborhood_function='triangle', random_seed=10)\n",
    "\n",
    "\n",
    "som.train_batch(data, 100, verbose=True)  \n",
    "quantization_errors = np.linalg.norm(som.quantization(data) - data, axis=1)\n",
    "error_treshold = np.percentile(quantization_errors, \n",
    "                               100*(1-outliers_percentage)+5)\n",
    "is_outlier = quantization_errors > error_treshold"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 576x576 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(8, 8))\n",
    "plt.scatter(data[~is_outlier, 0], data[~is_outlier, 1],\n",
    "            label='inlier')\n",
    "plt.scatter(data[is_outlier, 0], data[is_outlier, 1],\n",
    "            label='outlier')\n",
    "\n",
    "plt.legend()\n",
    "plt.savefig('resulting_images/som_outliers_detection_circle.png')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
